package num50;

/**
 * @author : DuJiabao
 * @Date : 2021/2/6 20:02
 * @Project : sword-finger-offer
 * @File : null.java
 * @Desc : 二进制，每个位表示二的次方。因此，从小到大遍历每个二进制位，如果为1，则结果乘以对应的次方，0则不乘。
 * 2^10 = (2^2) * (2^2^2^2)
 */
public class Solution2 {
    public double myPow(double x, int n) {
        return recursion(x, (long) n);
    }

    public double recursion(double x, long n) {
        double res = 1.0;
        if (n < 0) {
            x = 1 / x;
            n = -n;
        }
        while (n > 0) {
            if ((n & 1) == 1) {
                res *= x;
            }
            x *= x;
            n >>= 1;
        }
        return res;
    }
}
